﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PalcoCentral
{
    public partial class pcAdicionarPessoa : Form
    {
        public pcAdicionarPessoa()
        {
            InitializeComponent();
            this.FormBorderStyle = FormBorderStyle.FixedSingle;
        }

        private void tipoPessoaBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (tipoPessoaBox.SelectedIndex == 0)
            {
                pessoaPannel.Enabled = true;
                estudantePannel.Enabled = true;
                observacoesPannel.Enabled = true;
            }
            else
            {
                pessoaPannel.Enabled = true;
                estudantePannel.Enabled = false;
                observacoesPannel.Enabled = true;
            }
        }

        private void Cancel_Click(object sender, EventArgs e)
        {
            this.Close();

        }

        private void salvarPessoaBut_Click(object sender, EventArgs e)
        {

            if (tipoPessoaBox.SelectedIndex == 0)
            {
                PalcoCentral.Library.Student stu = new PalcoCentral.Library.Student();

                stu.Address = addressAddP.Text;
                stu.PostalCode = postcodeAddP.Text;
                stu.Locality = localityAddP.Text;
                stu.Telephone = telephoneAddP.Text;
                stu.AchieveIdBi = archiveIdAddP.Text;
                stu.EmergencyContact = emerContactAddP.Text;
                stu.PersonActive = true;
                stu.EducationResp = nameEEAddP.Text;
                stu.EducationRespEmail = emailEEAddP.Text;
                stu.EducationRespMobile = telmEEAddP.Text;
                stu.Observations = observationsAddP.Text;

                Int64 num;
                if (!string.IsNullOrEmpty(nifAddP.Text))
                {
                    if (Int64.TryParse(nifAddP.Text, out num))
                    {
                        stu.Nif = num;
                    }
                    else
                    {
                        errorFields("Conversão de NIF inválida.");
                        return;
                    }
                }
                DateTime x;
                if (!string.IsNullOrEmpty(dateOfBirthAddP.Text))
                {
                    if (DateTime.TryParse(dateOfBirthAddP.Text, out x))
                    {
                        stu.DateOfBirth = x;
                    }
                    else
                    {
                        errorFields("Data de nascimento inválida.");
                        return;
                    }
                }
                if (!string.IsNullOrEmpty(emissionBiAddP.Text))
                {
                    if (DateTime.TryParse(emissionBiAddP.Text, out x))
                    {
                        stu.BiEmission = x;
                    }
                    else
                    {
                        errorFields("Data de emissão de BI inválida.");
                        return;
                    }
                }


                if ((!string.IsNullOrEmpty(nameAddP.Text)) && (!string.IsNullOrEmpty(emailAddP.Text)) && (!string.IsNullOrEmpty(telmAddP.Text)))
                {
                    stu.Name = nameAddP.Text;
                    stu.Email = emailAddP.Text;
                    stu.Mobile = telmAddP.Text;
                }
                else
                {
                    errorFields("Campos obrigatórios por preencher.");
                    return;
                }

                Int64 bi;
                if (Int64.TryParse(biAddP.Text, out bi))
                {
                    stu.Bi = bi;
                }
                else
                {
                    errorFields("Introduza um numero de BI válido.");
                    return;
                }
                Library.OperationStatus os = Database.PersonDBAdapter.getInstance().AddStudent(stu);
                if (os.sucess)
                {
                    addSucessfull(string.Format("A pessoa - {0} - foi inserida com sucesso.", stu.Name));
                }
                else
                {
                    string error = os.errorMessage; 
                    Exception ex = os.ex; 
                }


            }
            else
            {
                PalcoCentral.Library.Person teach = new PalcoCentral.Library.Person();

                teach.Address = addressAddP.Text;
                teach.PostalCode = postcodeAddP.Text;
                teach.Locality = localityAddP.Text;
                teach.Telephone = telephoneAddP.Text;
                teach.AchieveIdBi = archiveIdAddP.Text;
                teach.EmergencyContact = emerContactAddP.Text;
                teach.PersonActive = true;
                teach.Observations = observationsAddP.Text;

                Int64 num;
                if (!string.IsNullOrEmpty(nifAddP.Text))
                {
                    if (Int64.TryParse(nifAddP.Text, out num))
                    {
                        teach.Nif = num;
                    }
                    else
                    {
                        errorFields("Conversão de NIF inválida.");
                        return;
                    }
                }

                DateTime x;
                if (!string.IsNullOrEmpty(dateOfBirthAddP.Text))
                {
                    if (DateTime.TryParse(dateOfBirthAddP.Text, out x))
                    {
                        teach.DateOfBirth = x;
                    }
                    else
                    {
                        errorFields("Data de nascimento inválida.");
                        return;
                    }
                }
                if (!string.IsNullOrEmpty(emissionBiAddP.Text))
                {
                    if (DateTime.TryParse(emissionBiAddP.Text, out x))
                    {
                        teach.BiEmission = x;
                    }
                    else
                    {
                        errorFields("Data de emissão de BI inválida.");
                        return;
                    }
                }

                if ((!string.IsNullOrEmpty(nameAddP.Text)) && (!string.IsNullOrEmpty(emailAddP.Text)) && (!string.IsNullOrEmpty(telmAddP.Text)))
                {
                    teach.Name = nameAddP.Text;
                    teach.Email = emailAddP.Text;
                    teach.Mobile = telmAddP.Text;
                }
                else
                {
                    errorFields("Campos obrigatórios por preencher.");
                    return;
                }

                Int64 bi;
                if (Int64.TryParse(biAddP.Text, out bi))
                {
                    teach.Bi = bi;
                }
                else
                {
                    errorFields("Introduza um numero de BI válido.");
                    return;
                }
                Library.OperationStatus os = Database.PersonDBAdapter.getInstance().AddTeacher(teach);
                if (os.sucess)
                {
                    addSucessfull(string.Format("A pessoa - {0} - foi inserida com sucesso.", teach.Name));
                }
                else
                {
                    string error = os.errorMessage;
                    Exception ex = os.ex; 
                }
            }

        }

        public void addSucessfull(string msg)
        {
            MessageBox.Show(string.Format("{0}", msg), "Operação bem sucedida",
                       MessageBoxButtons.OK, MessageBoxIcon.Information);
            this.Close();
        }

        public void errorFields(string msg)
        {
            MessageBox.Show(string.Format("{0}", msg), "Erro nos dados introduzidos",
                       MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

      
    }
}
